图的遍历算法BFS广度优先算法h

(根据大神的学习方法,以后要养成写博客的习惯啦!!!啦啦啦!!!)

昨天重新温习了图的广度优先遍历,今天就小记一下吧!

好的,那我们现在就开始了呀:

广度优先搜索算法是最简单的图搜索算法之一,也是许多重要的图算法原型。Prim的最小生成树算法和Dijkstra的单源最短路径算法都是用了累死广度优先搜索的思想。

广度优先搜索之所以如此得名是因为该算法始终是将已经发现的节点和没有发现的节点之间的边界,沿着其广度方向向外扩展。算法需要在发现所有距离源节点s为k的所有节点之后,才会发现距离源节点s为k+1的其他节点。

为了跟踪算法的进展,广度优先搜索在概念上将每个结点涂成白色、灰色或者黑色。所有的结点在开始的时候都涂成白色,在这些结点可能会变成白色或者黑色。在搜索过程中,第一次发现就会吧结点涂成或灰色。凡是灰色或者黑色的结点都是已经发现的结点,但是黑的与灰色的区别是黑色是已经遍历完的结点。

BFS(G,s)

1 for each vertex u属于G.V - {s}

2 u.color =WHITE

3 u.d = 无穷

4 u.p =NIL

5 s.color=GRAY

6 s.d=0

7 s.p=NIL

8 Q=空

9 ENQUEUE(Q,s)

10 while Q != NIL

11 u=DEQUEUE(Q)

12 for each v属于Adj[u]     意思是遍历与u邻接的买个点。

13  if v.color == WHITE

14 v.color=GRAY

15 v.d=u.d+1

     16 v.p=u

17 ENQUEUE(Q,V)

18 u.color=BLACK

再就是分析一下它的时间复杂度吧:

在前7行中,每一个点都会做3次初始化赋值操作,所以是3|V|,8,9行声明队列和源节点进入队列是2,除了源节点,所有的点都要进行一次进队列和出队列的操作,源节点再次要进行一次出队列的操作,所以是2(|V|-1)-1,在后面的12至18行中,每个点都要进行4次赋值,所以又有4|V|,遍历所有的邻接链表是2|E|。所以总得来说就是7|V|+2|E|.


广度优先算法计算出来的是最短路径。这里给出的是伪码,具体的源码下篇文章给出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值